package com.ww.juc.completable.future.then;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

/**
 * thenRun和thenRunAsync
 * thenRun表示某个任务执行完成后执行的动作，即回调方法，无入参，无返回值
 * @author wanggw
 * 2024年2月4日 下午5:41:36
 */
public class ThenRunDemo {

	public static void main(String[] args) throws InterruptedException, ExecutionException {
		CompletableFuture<Integer> cf1 = CompletableFuture.supplyAsync(() -> {
			System.out.println(Thread.currentThread() + "任务1悄咪咪的在做事...");
			return 1;
		});
		
		CompletableFuture<Void> cf2 = cf1.thenRun(() -> {
			System.out.println(Thread.currentThread() + "任务2被唤醒了，开始干活了...");
		});
		
		System.out.println("结果1：" + cf1.get());
		System.out.println("结果2：" + cf2.get());
		
		System.out.println("--------------------");
		
		// 异步
		CompletableFuture<Void> cf2_2 = cf1.thenRunAsync(() -> {
			System.out.println("任务2-2起来了，上班了");
		});
		
		System.out.println("结果2-2：" + cf2_2.get());
	}
}
